User:HW~zhwiki/test/categorytags.js

维基百科,自由的百科全书

注意:保存之后,你必须清除浏览器缓存才能看到做出的更改。Google ChromeFirefoxMicrosoft EdgeSafari:按住⇧ Shift键并单击工具栏的“刷新”按钮。参阅Help:绕过浏览器缓存以获取更多帮助。

// <nowiki>
// If FriendlyConfig aint exist.
if( typeof( FriendlyConfig ) == 'undefined' ) {
	FriendlyConfig = {};
}
importScript('User:Jimmy_xu_wrk/Friendly/morebits.js');

/**
 CategorytagsConfig.summaryAd ( string )
 If ad should be added or not to summary, default [[WP:FRIENDLY|Friendly]]
 */
if( typeof( FriendlyConfig.summaryAd ) == 'undefined' ) {
	FriendlyConfig.summaryAd = ",使用分類標記工具";
}

/**
 FriendlyConfig.watchTaggedPages ( boolean )
 */
if( typeof( FriendlyConfig.watchTaggedPages ) == 'undefined' ) {
	FriendlyConfig.watchTaggedPages = false;
}

/**
 FriendlyConfig.markTaggedPagesAsMinor ( boolean )
 */
if( typeof( FriendlyConfig.markTaggedPagesAsMinor ) == 'undefined' ) {
	FriendlyConfig.markTaggedPagesAsMinor = true;
}

/**
 Categorytags.markTaggedPagesAsPatrolled ( boolean )
 */
if( typeof( FriendlyConfig.markTaggedPagesAsPatrolled ) == 'undefined' ) {
	FriendlyConfig.markTaggedPagesAsPatrolled = false;
}

var isRedirect;

function friendlytag() {
	isRedirect = function () { 
 		var allPageTags=document.getElementsByTagName("*");
   		for (i=0; i<allPageTags.length; i++) {
   			if (allPageTags[i].className=='redirectText') {
   				return true;
			}
    		}
	return false;
	} ();
	if( isRedirect ) {
		twAddPortletLink( "javascript:Categorytag.callback()", wgULS("标记","標記"), "friendly-tag", wgULS("标记重定向","標記重定向"), "");
	} else if( wgNamespaceNumber != 14 || wgCurRevisionId == false ) {
		return;
	} else {
		twAddPortletLink( "javascript:Categorytag.callback()", wgULS("标记","標記"), "friendly-tag", wgULS("标记分類","標記分類"), "");
	}
}

$(friendlytag);

Categorytags.callback = function friendlytagCallback( uid ) {
	var Window = new SimpleWindow( 600, 400 );
	var form = new QuickForm( Categorytags.callback.evaluate );

	if( !isRedirect ) {
		Window.setTitle( "分類维护标记" );

		form.append( {
				type: 'checkbox',
				list: [
					{
						label: '如可能,合并到{{category tags}}',
						value: 'group',
						name: 'group',
						checked: FriendlyConfig.groupByDefault
						tooltip: '如果增加3个以上標記并勾选本项,所有新添加的横幅都将合并到一个{{' + Config.groupingBanner + '}}模板
					}
				]
			}
		);

		form.append( { type:'submit' } );

		form.append( { type:'header', label:'空分類或分類狀態標記' } );
		form.append( { type:'checkbox', name: 'maintenance', list: friendlytag.maintenanceList } );

		form.append( { type:'header', label:'維護標記' } );
		form.append( { type:'checkbox', name: 'problem', list: friendlytag.problemList } );

		form.append( { type:'header', label:'通知模板' } );
		form.append( { type:'checkbox', name: 'notice', list: friendlytag.noticeList } );

		if( typeof( FriendlyConfig.customTagList ) == 'object' ) {
			form.append( { type:'header', label:'自定义模板' } );
			form.append( { type: 'checkbox', name: 'custom', list: FriendlyConfig.customTagList } );
		}
	} else {
		Window.setTitle( "重定向维护标记" );

		form.append( { type:'submit' } );

		form.append( { type:'header', label:'常用模板' } );
		form.append( { type:'checkbox', name: 'commonredir', list: friendlytag.commonredirList } );

		form.append( { type:'header', label:'偶用模板' } );
		form.append( { type:'checkbox', name: 'rareredir', list: friendlytag.rareredirList } );

		form.append( { type:'header', label:'鲜用模板' } );
		form.append( { type:'checkbox', name: 'littleredir', list: friendlytag.littleredirList } );
	}

	form.append( { type:'submit' } );

	var result = form.render();
	Window.setContent( result );
	Window.display();
}

friendlytag.maintenanceList = [
	{
		label: wgULS("\{\{Blank category\}\}: 此分類現無內容,但以後可能有用","\{\{Blank category\}\}: 此分類現無內容,但以後可能有用"),
		value: 'Blank category'
	},
	{
		label: wgULS("\{\{Empty category\}\}: 即使沒有項目也不要刪除這個分類","\{\{Empty category\}\}: 即使沒有項目也不要刪除這個分類"),
		value: 'Empty category'
	},
	{
		label: wgULS("\{\{Hiddencat\}\}: 隱藏分類","\{\{Hiddencat\}\}: 隱藏分類"),
		value: 'Empty category'
	},
	{
		label: wgULS("\{\{DeleteBlankCategory\}\}: 快速刪除本空分類","\{\{DeleteBlankCategory\}\}: 快速刪除本空分類"),
		value: 'DeleteBlankCategory'
	}
];


friendlytag.problemList = [
	{
		label: wgULS("\{\Adminbacklog\}\}: 本頁是需要管理員關注的積壓工作","\{\{Adminbacklog\}\}: 本頁是需要管理員關注的積壓工作"),
		value: 'Adminbacklog'
	},
	{
		label: wgULS("\{\{Parent category\}\}: 根據該分類的範圍,其底下應該只包括子分類與有限的直接相關頁面","\{\{Parent category\}\}: 根據該分類的範圍,其底下應該只包括子分類與有限的直接相關頁面。"),
		value: 'Parent category'
	},
	{
		label: wgULS("\{\{Tracking category\}\}: 這是個追蹤分類","\{\{Tracking category\}\}: 這是個追蹤分類"),
		value: 'Tracking category'
	},
	{
		label: wgULS("\{\{Wikipedia category\}\}: 本分類用於維基百科項目的管理,並非百科全書的一部分","\{\{Wikipedia category\}\}: 本分類用於維基百科項目的管理,並非百科全書的一部分"),
		value: 'Wikipedia category'
		subgroup: {
			name: 'Wikipedia category',
			type: 'select',
			list: [
				{
					label: wgULS("\{\{Wikipedia parent category\}\}: 本分類用於維基百科項目的管理,並非百科全書的一部分。它所包含的頁面並非條目,或條目列表。鑑於本分類的範圍要求,其底下應該只包括子分類與有限的直接相關頁面。","\{\{Wikipedia parent category\}\}: 本分類用於維基百科項目的管理,並非百科全書的一部分。它所包含的頁面並非條目,或條目列表。鑑於本分類的範圍要求,其底下應該只包括子分類與有限的直接相關頁面。"),
					value: "Wikipedia parent category"
				},
				{
					label: wgULS("\{\{Wikipedia category\}\}: 本分類用於維基百科項目的管理,並非百科全書的一部分。它所包含的頁面並非條目,或條目列表。","\{\{Wikipedia category\}\}: 本分類用於維基百科項目的管理,並非百科全書的一部分。它所包含的頁面並非條目,或條目列表。"),
					value: "Wikipedia category"
				}
			]
		}
	},
	{
		label: wgULS("\{\{Template category\}\}: 本頁面分類用於對模板進行分類,不是維基百科全書的組成部分。","\{\{Template category\}\}: 本頁面分類用於對模板進行分類,不是維基百科全書的組成部分。"),
		value: 'Template category'
	},
	{
		label: wgULS("\{\{inuse\}\}: 这個分類正在进行重大修改","\{\{inuse\}\}: 這個分類正在進行重大修改"),
		value: 'inuse' },
	{
		label: wgULS("\{\{underconstruction\}\}: 这个分類是一个扩展或大修改,它并未供使用","\{\{underconstruction\}\}: 這個分類是一個擴展或大修改,它並未供使用"),
		value: 'underconstruction' }
];

friendlytag.commonredirList = [
	{
		label: "\{\{簡繁重定向\}\}: 引导简体至繁体,或繁体至简体",
		value: '簡繁重定向'
	},
	{
		label: "\{\{模板重定向\}\}: 指向模板",
		value: '模板重定向'
	},
	{
		label: "\{\{别名重定向\}\}: 标题的其他名称、笔名、绰号、同义字等",
		value: '别名重定向'
	},
	{
		label: "\{\{縮寫重定向\}\}: 标题缩写",
		value: '縮寫重定向'
	},
	{
		label: "\{\{拼寫重定向\}\}: 标题的其他不同拼写",
		value: '拼寫重定向'
	},
	{
		label: "\{\{錯字重定向\}\}: 标题的常见错误拼写或误植",
		value: '錯字重定向'
	},
	{
		label: "\{\{全名重定向\}\}: 标题的完整或更完整名称",
		value: '全名重定向'
	},
	{
		label: "\{\{短名重定向\}\}: 完整标题名称或人物全名的部分、不完整的名称或简称",
		value: '短名重定向'
	},
	{
		label: "\{\{姓氏重定向\}\}: 人物姓氏",
		value: '姓氏重定向'
	},
	{
		label: "\{\{人名重定向\}\}: 人物人名",
		value: '人名重定向'
	},
	{
		label: "\{\{非中文重定向\}\}: 非中文标题",
		value: '非中文重定向'
	},
	{
		label: "\{\{日文重定向\}\}: 日语名称",
		value: '日文重定向'
	}
];

friendlytag.rareredirList = [
	{
		label: "\{\{角色重定向\}\}: 电视剧、电影、书籍等作品的角色",
		value: '角色重定向'
	},
	{
		label: "\{\{章節重定向\}\}: 导向至较高密度(散文般密集)组织的页面",
		value: '章節重定向'
	},
	{
		label: "\{\{列表重定向\}\}: 导向至低密度的列表",
		value: '列表重定向'
	},
	{
		label: "\{\{可能性重定向\}\}: 导向至当前提供内容更为详尽的目标页面、或该页面的章节段落",
		value: '可能性重定向'
	},
	{
		label: "\{\{關聯字重定向\}\}: 标题名称关联字",
		value: '關聯字重定向'
	},
	{
		label: "\{\{捷徑重定向\}\}: 分類捷径",
		value: '捷徑重定向'
	}
];

friendlytag.littleredirList = [
	{
		label: "\{\{重定向模板用重定向\}\}: 重定向模板用",
		value: '重定向模板用重定向'
	},
	{
		label: "\{\{EXIF重定向\}\}: JPEG图像包含EXIF信息",
		value: 'EXIF重定向'
	}
];

// Set to true if template can be grouped into {{category tags}}
friendlytag.groupHash = {
	'Blank category' : true,
	'Adminbacklog' : true,
	'Wikipedia category' : true,
	'Empty category' : true
}

friendlytag.callbacks = {
	main: function( self ) {
		var form = self.responseXML.getElementById( 'editform' );
		var tagRe, text = '', summaryText = '添加';
		var tags = new Array(), groupableTags = new Array();
		var isNotability = false;

		if( !isRedirect ) {
			// Check for preexisting tags and separate tags into groupable and non-groupable arrays
			Status.info( '信息', '检查分類已有模板' );
			for( var i = 0; i < self.params.tags.length; i++ ) {
				tagRe = new RegExp( '(\\{\\{' + self.params.tags[i] + '(\\||\\}\\}))', 'im' );
				if( !tagRe.exec( form.wpTextbox1.value ) ) {
					if( friendlytag.groupHash[ self.params.tags[i] ] ) {
						groupableTags = groupableTags.concat( self.params.tags[i] );
					} else {
						tags = tags.concat( self.params.tags[i] );
					}
				} else {
					Status.info( '信息', '已在分類中找到\{\{' + self.params.tags[i]
						+ '\}\}...跳过' );
				}
			}

			if( self.params.group && groupableTags.length >= 3 ) {
				Status.info( '信息', '合并支持的模板至\{\{category tags\}\}' );

				groupableTags.sort();
				text += '\{\{article issues\n';
				summaryText += ' \{\{[[Template:category tags|category tags]]\}\}参数';
				for( var i = 0; i < groupableTags.length; i++ ) {
					text += '|' + groupableTags[i]
					+ '=\{\{subst:#time:c\}\}\n';

					if( i == (groupableTags.length - 1) ) {
						summaryText += '';
					} else if ( i < (groupableTags.length - 1) && i != 0 ) {
						summaryText += ',';
					}
					summaryText += '' + groupableTags[i];
				}
				text += '\}\}\n';
			} else {
				tags = tags.concat( groupableTags );
			}
		} else {
			// Check for preexisting tags
			Status.info( '信息', '检查重定向已有模板' );
			for( var i = 0; i < self.params.tags.length; i++ ) {
				tagRe = new RegExp( '(\\{\\{' + self.params.tags[i] + '(\\||\\}\\}))', 'im' );
				if( !tagRe.exec( form.wpTextbox1.value ) ) {
					tags = tags.concat( self.params.tags[i] );
				} else {
					Status.info( '信息', '已在重定向中找到\{\{' + self.params.tags[i]
						+ '\}\}...跳过' );
				}
			}
		}

		tags.sort();
		for( var i = 0; i < tags.length; i++ ) {
			if( tags[i] == 'uncategorized' || tags[i] == 'catimprove' ) {
				form.wpTextbox1.value += '\n\n\{\{' + tags[i]
				+ '|time=\{\{subst:#time:c\}\}\}\}';
			} else {
				/*if( tags[i] == 'Wikipedia category' ) {
					text += '\{\{' + self.params.Wikipedia categorySubcategory;
				} else*/ if( tags[i] == 'current' ) {
					text += '\{\{' + self.params.currentSubcategory;
				} else if( tags[i] == 'future' ) {
					text += '\{\{' + self.params.futureSubcategory;
				} else {
					text += ( isRedirect ? '\n' : '' ) + '\{\{' + tags[i];
				}

				if( tags[i] == 'notability' && self.params.notabilitySubcategory != 'none' ) {
					text += '|3=' + self.params.notabilitySubcategory;
				}

				if( tags[i] == 'notability' ) {
					isNotability = true;
				}

				if( tags[i] == 'do-attempt' ) {
					text += '|att=\{\{subst:#time:c\}\}\}\}\n';
				} else {
					text += isRedirect ? '\}\}' : '|time=\{\{subst:#time:c\}\}\}\}\n';
				}
			}

			if( i == (tags.length - 1) && ( i > 0 || groupableTags.length > 3 ) ) {
				summaryText += '';
			} else if ( i < (tags.length - 1) && ( i != 0 || groupableTags.length > 3 ) ) {
				summaryText += ', ';
			}

			summaryText += ' \{\{[[Template:';
			/*if( tags[i] == 'Wikipedia category' ) {
				summaryText += self.params.Wikipedia categorySubcategory + '|' + self.params.Wikipedia categorySubcategory;			
			} else*/ if( tags[i] == 'current' ) {
				summaryText += self.params.currentSubcategory + '|' + self.params.currentSubcategory;
			} else if( tags[i] == 'future' ) {
				summaryText += self.params.futureSubcategory + '|' + self.params.futureSubcategory;
			} else {
				summaryText += tags[i] + '|' + tags[i];
			}
			summaryText += ']]\}\}';
		}

		if( !isRedirect ) {
			text += form.wpTextbox1.value;
		} else {
			text = form.wpTextbox1.value + text;
		}
		summaryText += '标记至' + ( isRedirect ? '重定向' : '分類' ) + CategorytagConfig.summaryAd;

		var postData = {
			'wpMinoredit': FriendlyConfig.markTaggedPagesAsMinor ? 1 : undefined,
			'wpWatchthis': form.wpWatchthis.checked ? 1 : (FriendlyConfig.watchTaggedPages ? 1 : undefined),
			'wpStarttime': form.wpStarttime.value,
			'wpEdittime': form.wpEdittime.value,
			'wpAutoSummary': form.wpAutoSummary.value,
			'wpEditToken': form.wpEditToken.value,
			'wpSummary': summaryText,
			'wpTextbox1': text
		};

		self.post( postData );
		
		if( FriendlyConfig.markTaggedPagesAsPatrolled && self.params.rcid != '' ) {
			var query = {
				'title': wgPageName,
				'action': 'markpatrolled',
				'rcid': self.params.rcid
			};

			var wikipedia_wiki = new Wikipedia.wiki( '标记条目为已巡查', query );
			wikipedia_wiki.post();
		}

friendlytag.callback.evaluate = function friendlytagCallbackEvaluate(e) {
	var form = e.target;
	if( isRedirect ) {
		var tags = form.getChecked( 'commonredir' ).concat( form.getChecked( 'rareredir' ) ).concat( form.getChecked( 'littleredir' ) );
	} else {
		if( typeof( FriendlyConfig.customTagList ) == 'object' ) {
			var tags = form.getChecked( 'notice' ).concat( form.getChecked( 'problem' ) ).concat( form.getChecked( 'maintenance' ) ).concat( form.getChecked( 'custom' ) );
		} else {
			var tags = form.getChecked( 'notice' ).concat( form.getChecked( 'problem' ) ).concat( form.getChecked( 'maintenance' ) );
		}
		var notabilitySubcategory = form.getChecked( 'problem.notability' );
		var currentSubcategory = form.getChecked( 'notice.current' );
		var futureSubcategory = form.getChecked( 'notice.future' );
	}
	var params;

	if( tags.length == 0 ) {
		alert( '你必须至少选择一个标签' );
		return;
	}
	if( !isRedirect ) {
		params = {
			tags: tags,
			group: form.group.checked,
			notabilitySubcategory: notabilitySubcategory ? notabilitySubcategory[0] : null,
			currentSubcategory: currentSubcategory ? currentSubcategory[0] : null,
			futureSubcategory: futureSubcategory ? futureSubcategory[0] : null,
			rcid: QueryString.exists( 'rcid' ) ? QueryString.get( 'rcid' ) : ''
		}
	} else {
		params = {
			tags: tags,
			rcid: QueryString.exists( 'rcid' ) ? QueryString.get( 'rcid' ) : ''
		}
	}

	Status.init( form );

	var query = { 
		'title': wgPageName, 
		'action': 'submit'
	};
	Wikipedia.actionCompleted.redirect = wgPageName;
	Wikipedia.actionCompleted.notice = "完成";
	var wikipedia_wiki = new Wikipedia.wiki( '分類修改', query, Categorytag.callbacks.main );
	wikipedia_wiki.params = params;
	wikipedia_wiki.get();
}
// </nowiki>